home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
internet
/
irc_i_dodatki
/
eggdrop
/
eggdrop11.lha
/
scripts
/
wire.tcl
< prev
Wrap
Text File
|
1997-01-15
|
11KB
|
360 lines
#
# wire v1.33
# secondary encrypted communications on a botnet
# based on wire 1.0 by Robey Pointer
# 11 September 1996 by Gord-@saFyre
# updated 17 September 1996 by Gord-@saFyre
# updated 31 October 1996 by Gord-@saFyre
# updated 4 November 1996 by Gord-@saFyre
#
# requires at least eggdrop v1.0i+
#
# to initiate a secure communications link, decide on
# a common password between you and the people you want
# to talk to, then issue the command ".wire <password>"
# all lines starting with a semi-colon ";" will go
# to the wire.
#
# .wire <encrypt-key> initiates a wire session
#
# .onwire will return the handle@bot of all other
# users on the same wire
#
# initialize arrays
# idx -> encrypt-key
set wire(*) "*"
# $wire_cmd -> idx list
set wired(*) "*"
if {[lindex $version 1] < 1081} {
putlog "* Can't load wire -- needs at least v1.0h+"
} {
bind dcc - wire do_wire
bind filt - ";*" filt_wire
bind chof - * chof_wire
bind dcc - onwire onwire
bind fil - onwire onwire
}
# join the wire
proc do_wire {hand idx arg} {
global wire wired nick
if {$arg == ""} {
putdcc $idx "Usage: .wire <encrypt-key>|OFF"
if {[info exists wire($idx)]} {
putdcc $idx "You are currently on wire '$wire($idx)'."
}
return 0
}
if {($arg == "off") || ($arg == "OFF")} {
if {![info exists wire($idx)]} {
putdcc $idx "That's nice, but you weren't on the wire anyway."
return 0
}
set wire_cmd "!wire[encrypt $wire($idx) "wire"]"
set x [encrypt $wire($idx) "$hand left the wire."]
putwire $wire_cmd $idx "----- " $x
putallbots "$wire_cmd $nick $x"
unset wire($idx)
set wired($wire_cmd) [lreplace $wired($wire_cmd) [lsearch $wired($wire_cmd) $idx] [lsearch $wired($wire_cmd) $idx]]
if {![llength $wired($wire_cmd)]} {
unset wired($wire_cmd)
unbind bot - $wire_cmd bot_wire
}
putdcc $idx "You are now off the wire."
return 0
}
if {[info exists wire($idx)]} {
putdcc $idx "Changing encryption key ..."
set wire_cmd "!wire[encrypt $wire($idx) "wire"]"
set x [encrypt $wire($idx) "$hand left the wire."]
putwire $wire_cmd $idx "----- " $x
putallbots "$wire_cmd $nick $x"
unset wire($idx)
set wired($wire_cmd) [lreplace $wired($wire_cmd) [lsearch $wired($wire_cmd) $idx] [lsearch $wired($wire_cmd) $idx]]
if {![llength $wired($wire_cmd)]} {
unset wired($wire_cmd)
unbind bot - $wire_cmd bot_wire
}
}
set wire($idx) $arg
set wire_cmd "!wire[encrypt $wire($idx) "wire"]"
if {[info exists wired($wire_cmd)]} {
set wired($wire_cmd) [lappend wired($wire_cmd) $idx]
} {
set wired($wire_cmd) $idx
bind bot - $wire_cmd bot_wire
}
putdcc $idx "----- All text starting with ; will now go over the wire."
putdcc $idx "----- To see who's on your wire, type '.onwire'."
putdcc $idx "----- To leave, type '.wire off'."
set x [encrypt $wire($idx) "$hand joined wire '$wire($idx)'."]
putwire $wire_cmd $idx "----- " $x
putallbots "$wire_cmd $nick $x"
onwire $hand $idx $arg
return 0
}
proc filt_wire {idx text} {
global wire nick
if {![info exists wire($idx)]} { return 0 }
set wire_cmd "!wire[encrypt $wire($idx) "wire"]"
set hand [idx2hand $idx]
if {([string compare [string tolower [string range $text 1 2]] "me"] == 0) && ![isalphanum [string index $text 3]]} {
set text [string range $text 2 end]
set inhand "----- > $hand"
set outhand "!${hand}@$nick"
} {
set inhand "----- <$hand> "
set outhand "${hand}@$nick"
}
set x [encrypt $wire($idx) [string range $text 1 end]]
putwire $wire_cmd $idx $inhand $x
putallbots "$wire_cmd $outhand $x"
return 1
}
# people vanishing who might still be on the wire
proc chof_wire {hand idx} {
global wired wire nick
if {[info exists wire($idx)]} {
set wire_cmd "!wire[encrypt $wire($idx) "wire"]"
set x [encrypt $wire($idx) "$hand left the wire."]
putwire $wire_cmd $idx "----- " $x
putallbots "$wire_cmd $nick $x"
unset wire($idx)
set wired($wire_cmd) [lreplace $wired($wire_cmd) [lsearch $wired($wire_cmd) $idx] [lsearch $wired($wire_cmd) $idx]]
if {![llength $wired($wire_cmd)]} {
unset wired($wire_cmd)
unbind bot - $wire_cmd bot_wire
}
}
}
# who else is on the same wire with you?
proc onwire {handle idx arg} {
global wire wired nick version
if {![info exists wire($idx)]} {
putdcc $idx "You aren't on a wire."
return 0
}
set wire_cmd "!wire[encrypt $wire($idx) "wire"]"
set x [encrypt $wire($idx) $handle]
putdcc $idx "----- Currently on wire '$wire($idx)':"
putdcc $idx "----- Nick Bot Host"
putdcc $idx "----- ---------- ---------- ------------------------------"
putallbots "$wire_cmd !wirereq $idx $x"
foreach j [dcclist] {
append jlist " [lindex $j 0]"
}
foreach i $wired($wire_cmd) {
if {($i != "*") && ([lsearch $jlist $i] != -1)} {
set hand [idx2hand $i]
set attr " "
if {[matchattr $hand o]} {set attr "@"}
if {[matchattr $hand m]} {set attr "+"}
if {[matchattr $hand n]} {set attr "*"}
set outline "----- ${attr}${hand}"
for {set r [string length $hand]} {$r < 10} {incr r} {
append outline " "
}
append outline $nick
for {set r [string length $nick]} {$r < 11} {incr r} {
append outline " "
}
foreach j [dcclist] {
if {[lindex $j 0] == $i} {
append outline [lindex $j 2]
break
}
}
if {[getdccidle $i] >= 300} {
set idletime [expr [getdccidle $i] / 60]
if {$idletime >= 60} {
set idlehour [expr $idletime / 60]
set idlemin [expr $idletime % 60]
if {$idlehour >= 24} {
set idleday [expr $idlehour / 24]
set idlehour2 [expr $idlehour % 24]
set idlehour "${idleday}d${idlehour2}"
}
set idletime "${idlehour}h${idlemin}"
}
append outline " \[idle ${idletime}m\]"
}
putdcc $idx $outline
if {([lindex $version 1] >= 1094) && ([getdccaway $i] != "")} {
putdcc $idx "----- AWAY: [getdccaway $i]"
}
}
}
}
# incoming from other bots
proc bot_wire {from cmd text} {
global wire wired nick version
set header [lindex $text 0]
set encrypted [lindex $text 1]
if {[string first @ $header] == -1} {
if {$header == "!wirereq"} {
set fidx [lindex $text 1]
set fhand [lindex $text 2]
if {![info exists wired($cmd)]} {return 0}
set jlist "*"
foreach j [dcclist] {
append jlist " [lindex $j 0]"
}
foreach i $wired($cmd) {
if {($i != "*") && ([lsearch $jlist $i] != -1)} {
set hand [idx2hand $i]
set attr " "
if {[matchattr $hand o]} {set attr "@"}
if {[matchattr $hand m]} {set attr "+"}
if {[matchattr $hand n]} {set attr "*"}
set outline "----- ${attr}${hand}"
for {set r [string length $hand]} {$r < 10} {incr r} {
append outline " "
}
append outline $nick
for {set r [string length $nick]} {$r < 11} {incr r} {
append outline " "
}
foreach j [dcclist] {
if {[lindex $j 0] == $i} {
append outline [lindex $j 2]
break
}
}
if {[getdccidle $i] >= 300} {
set idletime [expr [getdccidle $i] / 60]
if {$idletime >= 60} {
set idlehour [expr $idletime / 60]
set idlemin [expr $idletime % 60]
if {$idlehour >= 24} {
set idleday [expr $idlehour / 24]
set idlehour2 [expr $idlehour % 24]
set idlehour "${idleday}d${idlehour2}"
}
set idletime "${idlehour}h${idlemin}"
}
append outline " \[idle ${idletime}m\]"
}
set x [encrypt $wire($i) $outline]
putbot $from "$cmd !wireresp $fidx $fhand $x"
if {([lindex $version 1] >= 1094) && ([getdccaway $i] != "")} {
set x [encrypt $wire($i) "----- AWAY: [getdccaway $i]"]
putbot $from "$cmd !wireresp $fidx $fhand $x"
}
}
}
return 0
}
if {$header == "!wireresp"} {
set fidx [lindex $text 1]
set xhand [lindex $text 2]
set xresp [lindex $text 3]
if {![info exists wired($cmd)]} {return 0}
if {[lsearch -exact $wired($cmd) $fidx] == -1} {return 0}
if {[idx2hand $fidx] != [decrypt $wire($fidx) $xhand]} {return 0}
putdcc $fidx [decrypt $wire($fidx) $xresp]
return 0
}
set header "($header) "
} {
if {[string index $header 0] == "!"} {
set header "> [string range $header 1 end]"
} {
set header "<$header> "
}
}
putwire $cmd -1 "----- $header" $encrypted
}
# display to local user (still encrypted)
proc putwire {cmd idx header text} {
global wire wired
if {![info exists wired($cmd)]} {return 0}
set jlist "*"
set clist "*"
foreach j [dcclist] {
append jlist " [lindex $j 0]"
if {[lindex $j 3] == "chat"} {
append clist " [lindex $j 0]"
}
}
foreach i $wired($cmd) {
if {($i != "*") && ([lsearch $jlist $i] != -1)} {
if {($i != $idx) || ([lsearch $clist $i] == -1) || ([echo $i] == 1)} {
set x [decrypt $wire($i) $text]
putdcc $i "${header}$x"
}
}
}
}
proc isalphanum {arg} {
if {[string length $arg] == 0} {return 0}
set ctr 0
while {$ctr < [string length $arg]} {
if {![string match \[0-9a-zA-Z\] [string index $arg $ctr]]} {return 0}
set ctr [expr $ctr + 1]
}
return 1
}
proc gordver_wire {} {
return "wire.tcl v1.33"
}
#### These commands will be included in all scriptpacks released by
#### Gord-@saFyre as of 15 April 1996. In combination with a
#### gordver_* process for each scriptpack, it will provide you
#### with a way to determine what versions you or other bots
#### currently have loaded. The command .checkver will return
#### a list of the loaded scripts and versions. The command
#### .checkver <bot> will return that info for the remote <bot>
proc checkver {} {
set response { }
foreach process [info procs gordver*] {
lappend response [$process]
}
return [lsort $response]
}
bind dcc m checkver dcc_checkver
proc dcc_checkver {hand idx arg} {
global botnick
putcmdlog "#$hand# checkver $arg"
if {[llength $arg] == 0} {
putdcc $idx "*** The following scriptpacks by Gord-@saFyre are loaded:"
foreach pack [checkver] {
putdcc $idx "*** $pack"
}
putdcc $idx "*** End of list."
return 0
}
foreach bot $arg {
if {[lsearch [string tolower [bots]] [string tolower $bot]] == -1} {
putdcc $idx "*** $bot is not a linked bot!"
} {
putbot $bot "checkver $hand"
}
}
return 0
}
bind bot - checkver bot_checkver
proc bot_checkver {bot cmd arg} {
global botnick
set from [lindex $arg 0]
sendnote $botnick "$from@$bot" "The following scriptpacks by Gord-@saFyre are loaded:"
foreach pack [checkver] {
sendnote $botnick "$from@$bot" $pack
}
sendnote $botnick "$from@$bot" "End of list."
return 0
}